﻿using System;
using System.Collections.Generic;
using System.Linq;
using SapaFinance.Domain.Extensions;

namespace SapaFinance.Domain.Model
{
    //public class Root :AbstractEntity
    //{
    //    private Root()
    //    {
    //        PaymentRequests = new List<Request>();
    //        PaymentOrders = new List<Order>();
    //        PaymentCompleted = new List<Payment>();
    //    }

    //    public Root(Request request)
    //        : this()
    //    {
    //        PaymentRequests.Add(request);
    //        request.SetRoot(this);
    //    }

    //    public Root(IEnumerable<Request> paymentRequests)
    //        : this()
    //    {
    //        foreach (var request in paymentRequests)
    //        {
    //            PaymentRequests.Add(request);
    //            request.SetRoot(this);
    //        }
    //    }

    //    public virtual ICollection<Request> PaymentRequests { get; set; }
    //    public virtual ICollection<Order> PaymentOrders { get; set; }
    //    public virtual ICollection<Payment> PaymentCompleted { get; set; }

    //    public Money GetTotalSumPaymentRequests()
    //    {
    //        return PaymentRequests.Sum(x => x.Payment);
    //    }

    //    public Money GetTotalSumPaymentOrders()
    //    {
    //        if (PaymentOrders.Any())
    //        {
    //            return PaymentOrders.Sum(x => x.Payment);
    //        }
    //        var payment = PaymentRequests.First().Payment;
    //        return (Money)Activator.CreateInstance(payment.GetType(), new object[] { 0.00m, payment.Currency });

    //    }

    //    public Order CreatePaymentOrder(User user)
    //    {
    //        var result = GetUnderPay();
    //        return new Order(user, PaymentRequests.First(), result);
    //    }

    //    public Payment CreatePaymentCompleted(User user)
    //    {
    //        return new Payment(user);
    //    }

    //    public void AddPaymentOrder(Order order)
    //    {
    //        order.SetRoot(this);
    //        PaymentOrders.Add(order);
            
    //    }

    //    public Money GetUnderPay()
    //    {
    //        return GetTotalSumPaymentRequests() - GetTotalSumPaymentOrders();
    //    }

    //    public void AddPaymentComplete(Payment completed)
    //    {
    //        completed.SetRoot(this);
    //        PaymentCompleted.Add(completed);
          
    //    }
    //}
}